/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package CapaDatos;

import com.itextpdf.text.BadElementException;
import com.itextpdf.text.DocumentException;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Comparator;
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;

/**
 *
 * @author Maria
 */
public class ListaNomina {

    private SortedSet <Nomina> nodoNomina;
    private Comparator comparadorCedula;

/** constructor de la clase ListaNomina**/
      public ListaNomina()
    {
        /*
         Se incializa el comparadorApellido con su constructor y
         * se le pasa al nodoCliente para conocer el criterio
         * de ordenamiento de la lista
         */
        comparadorCedula = new CompararCedulaNomina();
        nodoNomina = new TreeSet(comparadorCedula);

    }


    /**
     *Metodo que imprime el contenido de la coleccion
     *
     */
    public String imprimirColeccion() throws FileNotFoundException, BadElementException, MalformedURLException, IOException, DocumentException
    {
        int i;
        Nomina registroNomina;
        String cadena = "";


        /*
         * Se define un arreglo de tipo Object (la clase generica Java)
         */
        Object [] arregloNomina;



        /*
         * Se convierte la coleccion pasada como parametro a un array, que
         * es asignado al arreglo de tipo Object
         */
        arregloNomina = nodoNomina.toArray();


        System.out.println("DATOS NOMINA");
        System.out.println("-------------");

        /*
         * Se hace un recorrido del arreglo de tipo Object y se imprime
         * la informacion de la casilla i
         */
        for(i=0 ; i<arregloNomina.length ; i++)
        {
            registroNomina = (Nomina) arregloNomina[i];
            cadena += registroNomina.getDescripcionCargo()+"\n";

        }

        return cadena;
    }

    /**
     *firma que imprime el sueldo de la nómina
     *
     */
    public String imprimirColeccionSueldo() throws FileNotFoundException, BadElementException, MalformedURLException, IOException, DocumentException
    {
        int i;
        Nomina registroNomina;
        String cadena = "";


        /*
         * Se define un arreglo de tipo Object (la clase generica Java)
         */
        Object [] arregloNomina;



        /*
         * Se convierte la coleccion pasada como parametro a un array, que
         * es asignado al arreglo de tipo Object
         */
        arregloNomina = nodoNomina.toArray();


        for(i=0 ; i<arregloNomina.length ; i++)
        {
            registroNomina = (Nomina) arregloNomina[i];
            cadena += registroNomina.getSueldo()+"\n";

        }

        return cadena;
    }


    /**
     *
     * Metodo public boolean agregarElemento(Nodo objeto): Este metodo agrega
     *
     */

    /**
     * firma que agrega el Nodo "objeto" a la coleccion nodoNomina
     * @param objeto objeto de tipo Object
     * @return boolean, TRUE si se pudo agregar, FALSE si no se pudo agregar
     */
    public boolean agregarElemento(Object objeto)
    {
        Nomina laNomina = (Nomina) objeto;
        return nodoNomina.add(laNomina);
    }


    /**
     * firma que elimina  el Nodo "objeto" de la coleccion nodoNomina
     * @param objeto objeto de tipo Object
     * @return boolean, TRUE si se pudo eliminar, FALSE si no se pudo eliminar
     */
    public boolean removerElemento(Object objeto)
    {
        Nomina laNomina = (Nomina) objeto;
        boolean encontrado = false;
        Nomina auxiliar = null;

        /*
         * Se define un iterador inicializado con el iterador de la coleccion
         */
        Iterator iterador = nodoNomina.iterator();

        /*
         * Mientras no se encuentre el elemento y existan mas elementos en la
         * coleccion, se sigue entrando en el ciclo
         */
        while (!encontrado && iterador.hasNext())
        {
            /*
             *  Se obtiene el siguiente objeto del iterador y se le hace un cast
             *  para asignarlo al objeto de tipo Nodo
             */
            auxiliar = (Nomina) iterador.next();

            /*
             * Se invoca al mÃ©todo equals de la clase Nodo para determinar si son
             * iguales. En caso de serlo, se encontrÃ³ el elemento buscado
             */
            if (laNomina.equals(auxiliar))
                encontrado = true;
        }

        /*
         * Si se encontro el elemento, se procede a ejecutar el remove
         */
        if (encontrado)
        {
            if (nodoNomina.remove(auxiliar))
                return true;
        }

        return false;
    }


     /**
     * firma para buscar una nomina
     * @param cedula la cedula del empleado
     * @return de existir retorna la nomina, de lo contrario retorna "null"
     */
       public Nomina BuscarNomina (String cedula)
        {

             boolean encontrado = false;
             Nomina auxiliar = null;


               Iterator iterador = nodoNomina.iterator();

        while (!encontrado && iterador.hasNext())
        {

            auxiliar = (Nomina) iterador.next();

            if (auxiliar.getCedula().equals(cedula)==true)
                encontrado= true;
          }
            return auxiliar;
        }

       /**
        * firma para buscar una nomina por la cedula del empleado
        * @param cedula la cedula del empleado
        * @return boolean, TRUE la nomina existe, FALSE la nomina no existe
        */



          public Boolean BuscarNominaPorCedula (String cedula)
        {

             boolean encontrado = false;
             Nomina auxiliar = null;


               Iterator iterador = nodoNomina.iterator();

        while (!encontrado && iterador.hasNext())
        {

            auxiliar = (Nomina) iterador.next();

            if (auxiliar.getCedula().equals(cedula)==true)
                encontrado= true;
          }
            return encontrado;
        }

        /**
         * firma para eliminar un nomina por medio de la cedula
         * del empleado
         * @param cedula cedula del empleado
         */

        public Double calcularSueldoNomina ()
        {
             Double Total= 0.0;
             boolean encontrado = false;
             Nomina auxiliar = null;


               Iterator iterador = nodoNomina.iterator();

        while (!encontrado && iterador.hasNext())
        {

            auxiliar = (Nomina) iterador.next();
               Total += auxiliar.getSueldo();
          }
            return Total;
        }


       public void eliminarNominaPorCedula (Integer cedula)
        {
         Nomina auxiliar=null;
         auxiliar= BuscarNomina(String.valueOf(cedula));
         nodoNomina.remove(auxiliar);

       }
}


